#pragma once
#include "Cadena.h"
#include "ColaHeapImp.h"
#include "ICiudad.h"
#include "Recurso.h"
#include "FuncionHash.h"
#include "RecursoFuncionHash.h"
#include "FuncionIgualesRecurso.h"
#include "CastIterador.h"

class Ciudad:public ICiudad
{
		friend ostream &operator<<(ostream&, const Ciudad &);
public:
	Ciudad(Cadena unNombre,bool capital,int maxRecursos);
	~Ciudad(void);
	bool esCapital();
	virtual Cadena ObtenerNombre() const ;
	virtual Puntero<Iterador<pRecurso>> Recursos() const ;
	virtual bool TieneRecurso(Cadena recurso) const ;

	Puntero<ColaHeapImp<Puntero<Recurso>>> ObtenerRecurso() const;
	void sumarCiudad();
	// Operador de asignacion
	Ciudad &operator=(const Ciudad &);

	//comparacion
	bool operator==(const Ciudad &) const;
	bool operator!=(const Ciudad &) const ;
	bool operator>(const Ciudad &) const ;
	bool operator<(const Ciudad &) const ;
private:
	Cadena nombre;
	bool capital;
	int maxRecursos;
	Puntero<ColaHeapImp<Puntero<Recurso>>> recursos;
	
};
